package com.techshinogongjian.fingerprint;

import android.content.Context;

/**
 * Created by tony on 2017/1/9.
 */

public class TCFP {

	public final String TAG = this.getClass().getName();
	private Context mContext = null;

	// Used to load the 'native-lib' library on application startup.
	static {
		System.loadLibrary("native-tcfp");
	}

	public TCFP(Context context) {
		this.mContext = context;
	}

	/**
	 *
	 * @param nStyle
	 *            支持多种功能预留
	 * @param fd
	 *            带有权限的USB句柄
	 * @param pOutMsg
	 *            输出信息预留
	 * @return 返回值定义
	 */
	public native int TCFP_Init(int nStyle, int fd, String pOutMsg);

	/**
	 *
	 * @return
	 */
	public native int TCFP_UnInit();

	/**
	 *
	 * @param nOptCfg
	 * @param nOptVal
	 * @param pOutMsg
	 * @return
	 */
	public native int TCFP_Version(int nOptCfg, int[] nOptVal, byte[] pOutMsg);

	/**
	 * 图片质量分数 当指纹特征类型选择为International时，返回NFIQ，其他情况下返回0～100分值
	 * 
	 * @param image
	 *            图片大小
	 * @param imageAttr
	 *            图片属性，imageAttr[0]图片长度，imageAttr[1]图片宽度
	 * @return 普通 分值范围0~100 国际 NFIQ_EXCELLENT 1 NFIQ_VERY_GOOD 2; NFIQ_GOOD 3;
	 *         NFIQ_FAIR 4; NFIQ_POOR 5;
	 */
	public static native int TCFP_GetQualityScore(byte[] image,
			int imageLenght, int[] imageAttr);

	/**
	 * 提取图片中指纹特征
	 * 
	 * @param feature
	 *            特征缓冲区大小
	 * @param image
	 *            图片数据区
	 * @param imageLength
	 *            图片大小
	 * @param imageAttr
	 *            图片属性，imageAttr[0]图片长度，imageAttr[1]图片宽度
	 * @return >0 返回特征长度 <0 失败
	 */
	public static native int TCFP_FeatureExtract(byte[] feature, byte[] image,
			int imageLength, int[] imageAttr);

	/**
	 *
	 * @param featureData
	 *            特征
	 * @param featureTemplet
	 *            模板或特征
	 * @return 0 to 100
	 */
	public static native int TCFP_FeatureMatch(byte[] featureData,
			int featureLenght, byte[] featureTemplet, int templetLenght);

	/**
	 * TESO格式中三个特征合成一个模板
	 * 
	 * @param Feature0
	 * @param Feature1
	 * @param Feature2
	 * @param templet
	 * @return 返回值定义
	 */
	public static native int TCFP_FeatureTempletExtract(byte[] Feature0,
			byte[] Feature1, byte[] Feature2, byte[] templet);

	/**
	 *
	 * @param jRAWImage
	 *            RAW图数据区
	 * @param jRAWImageLength
	 *            RAW图长度
	 * @param jRAWImageAttr
	 *            输入RAW 图片属性，imageAttr[0]图片长度，imageAttr[1]图片宽度
	 * @param jWSQImage
	 *            WSQ图片缓冲区（默认开的大一些）
	 * @param requiredSize
	 *            Expected size of the WSQ image
	 * @param sizeForced
	 *            1: requiredSize should be forced; 0:requiredSize is not
	 *            forced（default 0）
	 * @return 失败 <0 成功 返回WSQ图片长度
	 */
	public static native int TCFP_Raw2WSQ(byte[] jRAWImage,
			int jRAWImageLength, int[] jRAWImageAttr, byte[] jWSQImage,
			int requiredSize, int sizeForced);

	/**
	 *
	 * @param jWSQImage
	 *            WSQ图片
	 * @param jWSQImageLength
	 *            WSQ图长度
	 * @param jRAWImage
	 *            RAW图数据缓冲区（默认开的大一些）
	 * @param jRAWImageAttr
	 *            输出RAW 图片属性，imageAttr[0]图片长度，imageAttr[1]图片宽度
	 * @return 失败 <0 成功 返回图片长度
	 */
	public static native int TCFP_WSQ2Raw(byte[] jWSQImage,
			int jWSQImageLength, byte[] jRAWImage, int[] jRAWImageAttr);

	/**
	 *
	 * @param jRAWImage
	 *            RAW图数据区
	 * @param jRAWImageLength
	 *            RAW图长度
	 * @param jRAWImageAttr
	 *            输入RAW 图片属性，imageAttr[0]图片长度，imageAttr[1]图片宽度
	 * @param jWSQImage
	 *            WSQ图片缓冲区（默认开的大一些）, 20k以上
	 * @param enrolResult
	 *            注册结果代码
	 * @param compressRatio
	 *            压缩倍数
	 * @param jstrBuf
	 *            输出错误信息，返回-9时的错误串，byte[256]
	 * @return 成功返回图片长度 失败返回 < 0
	 */
	public native int TCFP_Compress(byte[] jRAWImage, int jRAWImageLength,
			int[] jRAWImageAttr, byte[] jWSQImage, byte enrolResult,
			int compressRatio, byte[] jstrBuf);

	/**
	 *
	 * @param jWSQImage
	 *            WSQ图片
	 * @param jWSQImageLength
	 *            WSQ图长度
	 * @param jRAWImage
	 *            RAW图数据缓冲区（默认开的大一些）
	 * @param jRAWImageAttr
	 *            输出RAW 图片属性，imageAttr[0]图片长度，imageAttr[1]图片宽度
	 * @param jstrBuf
	 *            输出错误信息，返回-9时的错误串，byte[256]
	 * @return 失败 <0
	 */
	public native int TCFP_Decompress(byte[] jWSQImage, int jWSQImageLength,
			byte[] jRAWImage, int[] jRAWImageAttr, byte[] jstrBuf);

	/**
	 *
	 * @param jGBFeature
	 *            输出GB特征B64(含'\0')
	 * @param jTcFea
	 *            输入Base64过的TC格式
	 * @param jTcFeaLength
	 *            jTcFea长度
	 * @param jFingerNum
	 *            nFgr(右->左，拇->小，[1-10])
	 * @param jImageAttr
	 *            图像数据imageAttr[0]图片长度，imageAttr[1]图片宽度
	 * @return >0 返回特征长度
	 */
	public static native int TCFP_TcMutToGb(byte[] jGBFeature, byte[] jTcFea,
			int jTcFeaLength, int jFingerNum, int[] jImageAttr);

	/**
	 *
	 * @param jTcFea
	 *            输出Base64过的TC格式
	 * @param jGBFeature
	 *            输入GB特征B64(含'\0')
	 * @param jGBFeaLength
	 *            jGBFeature长度
	 * @return >0 返回特征长度
	 */
	public static native int TCFP_TcMutFrGb(byte[] jTcFea, byte[] jGBFeature,
			int jGBFeaLength);

}
